package pe.gob.minam.sismon.core.dao.impl;

import static pe.gob.minam.sismon.core.util.UtilCore.establecerCondicion;
import static pe.gob.minam.sismon.core.util.UtilCore.establecerParam;

import java.util.List;

import javax.persistence.Query;

import org.springframework.stereotype.Repository;

import pe.gob.minam.sismon.core.base.dao.impl.BaseDaoImpl;
import pe.gob.minam.sismon.core.dao.GnrConfiguracionColasDao;
import pe.gob.minam.sismon.core.domain.GnrConfiguracionColas;
import pe.gob.minam.sismon.core.util.ExceptionCore;

@Repository("gnrConfiguracionColasDao")
public class GnrConfiguracionColasDaoImpl extends BaseDaoImpl<GnrConfiguracionColas> implements GnrConfiguracionColasDao {

	@SuppressWarnings("unchecked")
	@Override
	public List<GnrConfiguracionColas> listarConfiguraciones(Integer idSistema,
			Integer tipoUsuarioColas, String idprotocolo, String usuario) throws ExceptionCore{
		StringBuilder sql = new StringBuilder();
		sql.append(" SELECT g FROM GnrConfiguracionColas g ");
		sql.append("INNER JOIN FETCH g.gnrSistema ");
		sql.append("where 1=1 ");
		
		establecerCondicion(sql, " AND g.gnrSistema.idSistema=:idSistema", idSistema);
		establecerCondicion(sql, " AND g.tipoUsuarioColas=:tipoUsuarioColas", tipoUsuarioColas);
		establecerCondicion(sql, " AND g.idprotocolo=:idprotocolo", idprotocolo);
		establecerCondicion(sql, " AND g.usuario=:usuario", usuario);

		Query query = getEntityManager().createQuery(sql.toString());

		establecerParam(query, "idSistema", idSistema);
		establecerParam(query, "tipoUsuarioColas", tipoUsuarioColas);
		establecerParam(query, "idprotocolo", idprotocolo);
		establecerParam(query, "usuario", usuario);

		return (List<GnrConfiguracionColas>) query.getResultList();
	}

	
}
